package com.own.component.util.time;

import com.own.component.util.time.base.DateTimeBaseUtil;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;

/**
 * LocalDateTimeUtil
 *
 * @author chenxueli
 * @date 2023-06-28 09:24:00
 */
public class LocalDateTimeUtil {

    /**
     * 获取今日开始的时间
     *
     * @return 今日开始的时间
     */
    public static LocalDateTime startToday() {
        return startOfDay(LocalDate.now());
    }

    /**
     * 获取今日最后的时间
     *
     * @return 今日最后的时间
     */
    public static LocalDateTime endToday() {
        return endOfDay(LocalDate.now());
    }

    /**
     * 获取某日开始的时间
     *
     * @param date 日期
     * @return 某日开始的时间
     */
    public static LocalDateTime startOfDay(LocalDate date) {
        return LocalDateTime.of(date, LocalTime.MIN);
    }

    /**
     * 获取某日最后的时间
     *
     * @param date 日期
     * @return 某日最后的时间
     */
    public static LocalDateTime endOfDay(LocalDate date) {
        return LocalDateTime.of(date, LocalTime.MAX);
    }

    /**
     * 格式化时间
     *
     * @param pattern 格式化的字段串
     * @return 时间字符串
     */
    public static String format(String pattern) {
        return format(LocalDateTime.now(), pattern);
    }

    /**
     * 格式化时间
     *
     * @param dateTime 时间
     * @param pattern  格式化的字段串
     * @return 时间字符串
     */
    public static String format(LocalDateTime dateTime, String pattern) {
        var formatter = DateTimeBaseUtil.getDateTimeFormatter(pattern);
        return dateTime.format(formatter);
    }

    /**
     * 格式化时间
     *
     * @param text     时间字符串
     * @param patterns 格式化的字段串
     * @return 时间
     */
    public static LocalDateTime parse(String text, String... patterns) {
        var pattern = DateTimeBaseUtil.buildPattern(patterns);
        var formatter = DateTimeBaseUtil.getDateTimeFormatter(pattern);
        return LocalDateTime.parse(text, formatter);
    }

}
